
using System;

namespace BeeTest
{
	public class WhenState : WhenStateBase
	{
		#region Fields & Properties


		#endregion


		#region Constructors

		public WhenState()
			: base(null)
		{
		}

		public WhenState(Exception exc) 
			: base(exc)
		{
		}

		#endregion


		#region Operations

		public AndThenState Then(Action assertFunc)
		{
			this.AssertNoExceptionWasThrown();
			assertFunc();
			return new AndThenState(this);
		}


		public AndThenState Then<TP0>(Action<TP0> assertFunc, TP0 arg0)
		{
			this.AssertNoExceptionWasThrown();
			assertFunc(arg0);
			return new AndThenState(this);
		}


		public AndThenState Then<TP0, TP1>(Action<TP0, TP1> assertFunc, TP0 arg0, TP1 arg1)
		{
			this.AssertNoExceptionWasThrown();
			assertFunc(arg0, arg1);
			return new AndThenState(this);
		}


		public AndThenState Then<TP0, TP1, TP2>(Action<TP0, TP1, TP2> assertFunc, TP0 arg0, TP1 arg1, TP2 arg2)
		{
			this.AssertNoExceptionWasThrown();
			assertFunc(arg0, arg1, arg2);
			return new AndThenState(this);
		}


		public AndThenState Then<TP0, TP1, TP2, TP3>(Action<TP0, TP1, TP2, TP3> assertFunc, TP0 arg0, TP1 arg1, TP2 arg2, TP3 arg3)
		{
			this.AssertNoExceptionWasThrown();
			assertFunc(arg0, arg1, arg2, arg3);
			return new AndThenState(this);
		}


		public AndThenState Then<TP0, TP1, TP2, TP3, TP4>(Action<TP0, TP1, TP2, TP3, TP4> assertFunc, TP0 arg0, TP1 arg1, TP2 arg2, TP3 arg3, TP4 arg4)
		{
			this.AssertNoExceptionWasThrown();
			assertFunc(arg0, arg1, arg2, arg3, arg4);
			return new AndThenState(this);
		}


		#endregion
	}
}
